﻿using System;
using System.Windows;
using SoftSource.MVVMC;
using SoftSource.Timecard.Web.Data;

namespace SoftSource.Timecard.Controller
{
    public interface IController : IControllerBase
    {
        Func<UIElement> CreateMainView { get; }
        Func<UIElement> CreateUserView { get; }
        Func<UIElement> CreateReportView { get; }
        Func<UIElement> CreateProjectView { get; }
        Func<UIElement> CreateSummaryView { get; }
        Func<UIElement> CreateCategoryView { get; }
        Func<UIElement> CreateCustomerView { get; }
        Func<UIElement> CreateInvoicingView { get; }
        Func<UIElement> CreateMilestoneView { get; }
        Func<UIElement> CreateManagementView { get; }
        Func<UIElement> CreateUpdateReminderView { get; }
        Func<UIElement> CreateEntryManagementView { get; }
        Func<UIElement> CreateUtilizationSummaryView { get; }
        Func<UIElement> CreateEntriesFlaggedForAdminView { get; }
        Func<UIElement> CreateEntriesPriorToProjectBillingDateView { get; }

        Func<Action<IObservable<string>>, UIElement> CreateGetUserPasswordView { get; }

        Func<Action, UIElement> CreateNewUserEditor { get; }
        Func<Action, UIElement> CreateNewProjectEditor { get; }
        Func<int, Action, UIElement> CreateUserEditor { get; }
        Func<int, Action, UIElement> CreateProjectEditor { get; }
        Func<int, Action, UIElement> CreateCloneProjectEditor { get; }
        Func<User, Action, UIElement> CreateUserProjectEditor { get; }
        Func<Project, Action, UIElement> CreateProjectCategoryEditorView { get; }
        Func<Project, Action, UIElement> CreateProjectMembershipEditorView { get; }
        Func<ProjectMember, Action, UIElement> CreateProjectMemberEditorView { get; }
        Func<EntryLog, Action, UIElement> CreateEntryProjectCategoryAssociationEditorView { get; }
    }
}